package com.sym.glide.extension;

import com.bumptech.glide.RequestBuilder;
import com.bumptech.glide.annotation.GlideExtension;
import com.bumptech.glide.annotation.GlideType;
import com.bumptech.glide.request.RequestOptions;
import com.sym.glide.gif.FrameSequenceDrawable;

/**
 * 定义 Glide Extension.
 * 在Application模块中可以根据需求实现任意多个被@GlideExtension注解的类，在Library模块中同样如此。
 * 当AppGlideModule被发现时，所有有效的Glide扩展类会被合并，所有的选项在API中均可以被调用。
 * 合并冲突会导致Glide的Annotation Processor抛出编译错误。
 * 被@GlideExtention注解的类有两种扩展方式：
 * GlideOption - 为RequestOptions添加一个自定义的选项。
 * GlideType - 添加对新的资源类型的支持(GIF，SVG 等等)。
 * 注解@GlideOption和＠GlideType均是修饰一个方法，前者修饰的会在GlideOptions与GlideRequest中生成方法，后者修饰的会在GlideRequests中生成方法
 */
@GlideExtension
public class GifExtensions {

    private GifExtensions() {
    }

    private final static RequestOptions DECODE_TYPE = RequestOptions
            .decodeTypeOf(FrameSequenceDrawable.class)
            .lock();

    @GlideType(FrameSequenceDrawable.class)
    public static RequestBuilder<FrameSequenceDrawable> asGif2(RequestBuilder<FrameSequenceDrawable> requestBuilder) {
        return requestBuilder.apply(DECODE_TYPE);
    }

}
